|
In computer programming, particularly in the C, C++, C#, and Java programming languages, the volatile keyword indicates that a value may change between different accesses, even if it does not appear to be modified. This keyword prevents an optimizing compiler from optimizing away subsequent reads or writes and thus incorrectly reusing a stale value or omitting writes. Volatile values primarily arise in hardware access (memory-mapped I/O), where reading from or writing to memory is used to communicate with peripheral devices, and in threading, where a different thread may have modified a value. Despite being a common keyword, the behavior of volatile differs significantly between programming languages, and is easily misunderstood. In C and C++, it is a type qualifier, like const , and is a property of the ''type''. Furthermore, in C and C++ it does ''not'' work in most threading scenarios, and that use is discouraged. In Java and C#, it is a property of a variable and indicates that the object to which the variable is bound may mutate, and is specifically intended for threading. In the D programming language, which is based on C++, there is a separate keyword shared for the threading usage, but no volatile keyword exists.==In C and C++== In C, and consequently C++, the volatile keyword was intended to〔''Publication on C++ standards committee website''; http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2016.html〕* allow access to memory mapped devices * allow uses of variables between setjmp and longjmp * allow uses of sig_atomic_t variables in signal handlers.Operations on volatile variables are not atomic, nor do they establish a proper happens-before relationship for threading. This is according to the relevant standards (C, C++, POSIX, WIN32),〔''Publication on C++ standards committee website''; http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2016.html〕 and this is the matter of fact for the vast majority of current implementations. Thus, the usage of volatile keyword as a portable synchronization mechanism is discouraged by many C/C++ groups.〔''Volatile Keyword In Visual C++''; http://msdn2.microsoft.com/en-us/library/12a04hfd.aspx〕〔''Linux Kernel Documentation - Why the "volatile" type class should not be used''; http://kernel.org/doc/Documentation/volatile-considered-harmful.txt〕〔''C++ and the Perils of Double-Checked Locking''; http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf〕抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「Volatile (computer programming)」の詳細全文を読む スポンサード リンク
|